// 对象复制

const obj = {name:"dzz",age:30,weight:140,height:174}

//1 object.assign

const obj1 = Object.assign({},obj)

console.log(obj1)

//2 对象展开符

const obj2 = {...obj}

console.log(obj2)

// 3 stringify parse 深度复制

const obj3 = JSON.parse(JSON.stringify(obj))

console.log(obj3)

// 4. 使用深拷贝库（如lodash的cloneDeep方法）：

// const _ = require("lodash");
// const copyObj = _.cloneDeep(obj);
// console.log(copyObj); // 输出: { name: "John", age: 25 }

// Array.prototype.slice()、Array.prototype.concat()

/**

 ES6 一共有 5 种方法可以遍历对象的属性。
（1）for...in

for...in循环遍历对象自身的和继承的可枚举属性（不含 Symbol 属性）。

（2）Object.keys(obj)

Object.keys返回一个数组，包括对象自身的（不含继承的）所有可枚举属性（不含 Symbol 属性）的键名。

（3）Object.getOwnPropertyNames(obj)

Object.getOwnPropertyNames返回一个数组，包含对象自身的所有属性（不含 Symbol 属性，但是包括不可枚举属性）的键名。

（4）Object.getOwnPropertySymbols(obj)

Object.getOwnPropertySymbols返回一个数组，包含对象自身的所有 Symbol 属性的键名。

（5）Reflect.ownKeys(obj)
 */


for(let item in obj){
  console.log(item)
}

console.log(Object.keys(obj))

console.log(Object.getOwnPropertyNames(obj))


console.log(Object.getOwnPropertySymbols(obj))

console.log(Reflect.ownKeys(obj))

console.log(Object.getPrototypeOf(obj))



// 判断数据类型的方式
//1 typeof
//2 instanceof
//3 （2).constructor===Number   （true).constructor===Boolean ('str').constructor===String
//4 object.prototype.toString().call

